如果我的应用程序崩溃,它会挂起几秒钟才会被Android告知应用程序崩溃并需要关闭.所以我想用一般的方法在我的应用程序中捕获所有异常:
try {
// ...
} catch(Exception e) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
并创建一个新的Activity解释应用程序立即崩溃(并且还让用户有机会发送带有错误详细信息的邮件),而不是因为Android而导致延迟.是否有更好的方法来实现这一点,或者这是否沮丧?
更新:我正在使用支持ART的Nexus 5,我没有注意到我曾经遇到的应用程序崩溃的延迟(我最初谈论的"悬挂").我认为,因为现在一切都是本机代码,崩溃会立即发生,同时获取所有崩溃信息.也许Nexus 5只是快速:)无论如何,这可能不会成为未来Android版本的担忧(鉴于ART将成为Android L中的默认运行时).
一个在管理工作室中工作的查询以及executeUpdate相同的executeUpdate返回-1,这在我们可以找到的任何文档中都是未定义的.它应该只返回rowcount或0.这是什么意思?如果重要,驱动程序是JDBC-ODBC桥.
例:
String query = "IF NOT EXISTS (SELECT * FROM animals WHERE animal_name ='" + a +"') INSERT INTO " + table + " (animal_name, animal_desc, species_id) VALUES ('" + a + "', '" + b + "', " + c + ")";
int result = statement.executeUpdate(query);
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
查询有效,因为该行被添加到数据库中,奇怪的是它返回-1,其中文档说它只返回0或rowcount(因为我已经更正).
更新:
在Management Studio中运行此结果,并且"命令已成功完成".
IF NOT EXISTS (SELECT * FROM animals WHERE animal_name = 'a')
INSERT INTO animals(animal_name, animal_desc, species_id) VALUES ('a', 'a', …Run Code Online (Sandbox Code Playgroud) 我正在构建一个模块化的.NET核心应用程序,它可以在运行时使用MEF加载扩展.我有2个项目,一个是我希望能够在运行时加载的库,然后我有我的主应用程序将进行加载.
我的库项目有一些Nuget依赖项.为了在运行时加载我的库,我需要在运行时在库旁边使用这些Nuget依赖项,但使用VS2017构建不包括这些Nuget DLL作为输出的一部分.
在构建库时如何获取Nuget DLL?
编辑:我曾尝试dotnet publish和dotnet pack,但两者的那些让我nupkg只包含我的DLL文件,而不是DLL文件的NuGet我需要它.此外,我无法nupkg在运行时轻松加载文件,这就是为什么我只想自己获得生成的程序集.
对于它的价值,这就是我的csproj的样子:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<AssemblyName>JSON.plugin</AssemblyName>
<IncludeBuiltProjectOutputGroup>true</IncludeBuiltProjectOutputGroup>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Composition" Version="1.0.31" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\BDDGen.Types\BDDGen.Types.csproj" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud) 我的目标是build.xml:
<target name="-pre-compile">
<property file="build.properties"/>
<buildnumber file="build.version"/>
<tstamp>
<format property="timestamp" pattern="yyyy-MM-dd HH:mm:ss"/>
</tstamp>
<manifest file="manifest.mf">
<attribute name="MAJOR" value="${version.major}"/>
<attribute name="MINOR" value="${version.minor}"/>
<attribute name="RELEASE" value="${release}"/>
<attribute name="BUILD" value="${build.number}"/>
<attribute name="BUILD-DATE" value="${timestamp}"/>
<attribute name="PROTOCOL" value="${protocol}"/>
<attribute name="APPCODE" value="${appcode}"/>
</manifest>
</target>
Run Code Online (Sandbox Code Playgroud)
它工作正常,manifest.mf在Netbeans中的Clean和Build之后打开,显示我添加的所有额外属性.但是,当我打开我的jar文件时,我发现它只包含默认的东西:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.7.0-b147 (Oracle Corporation)
Run Code Online (Sandbox Code Playgroud)
当我在一个项目中有两个包之前,我有这个工作正常.一个包是我将要带到其他项目的所有库的东西,所以我决定把它拆分成另一个项目,所以我可以自己构建库jar.现在我有这个问题.当我自己编译库以及依赖它的其他项目时,它都会发生.
在Java中我会使用java.nio库并使用FileChannel.transferTo()和FileChannel.transferFrom().在(特定)C#中是否有类似的东西或我是否必须从某个地方加载一些未管理的.dll?谷歌在这种情况下并没有用处.
编辑:我应该注意到我的目标是.NET 3.5.
我使用的是Task一个CancellationTokenSource提供的,在我的任务中,我总是检查是否请求取消并在请求时停止执行 - 在我控制的代码部分.问题是,在这个任务中,我使用了非常长的运行方法,这些方法来自不支持取消的库,并且是为.NET 3.5编译的(我使用的是4.5.1).
根据输入,这些方法可以运行几分钟(有时10+).如果结果永远不会被使用,我不想让这么多的处理浪费掉.
有没有其他方法强制终止Task?也许我最好在我的任务中创建一个线程来运行这些方法,并在请求取消时终止这些线程.
我很清楚 C# 不允许块readonly中的字段switch,这就是这个问题所解决的问题。
我想了解为什么会出现这种情况。这只是一个任意的语言规范怪癖,还是背后有技术原因?如果有,技术原因是什么?
让我澄清一下,我理解const和之间的区别readonly,并且我知道 C#switch需要const值,或者在编译时已知的值。对我来说,从功能上来说,使用一堆if..else if语句与使用一条语句具有相同的结果switch,因为无论我能用一条switch语句做什么,我也可以用 an 实现if,例如:
const int MyConstantValue = 10;
int myCompareValue = 3;
if(myCompareValue == MyConstantValue)
{
//...
}
else
{
//...
}
switch(myCompareValue)
{
case MyConstantValue:
//...
break;
default:
//...
break;
}
Run Code Online (Sandbox Code Playgroud)
这两个构造具有相同的结果:执行elseor块,但可以在没有编译时常量或已知值的情况下执行此操作。为什么一个人可以做到而一个人却做不到?defaultififswitch
如果我使用这个类:
public class BooleanTest {
public static void main(String args[]) {
final Object[] objarray = new Object[2];
try {
objarray[0] = "Hello World!";
objarray[1] = false;
} catch (NullPointerException e) {
}
boolean bool = (boolean) objarray[1];
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,我可以分配boolean没问题.在询问用户密码时,为什么我不能做同样的事情?
final Object result[] = new Object[2];
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,0));
JLabel label = new JLabel();
label.setHorizontalAlignment(SwingConstants.LEADING);
JTextField input = new JTextField();
input.setHorizontalAlignment(SwingConstants.CENTER);
JCheckBox checkbox = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用反射来查看是否可以达到我能够输入类名的位置,我的应用程序将加载该类并创建它的实例.经过几次尝试后,我发现我不能仅仅在Class.forName()没有包名的情况下粘贴一个类名,所以我最终尝试获取已加载的所有可用包的列表并尝试加载我输入的每个包的类直到它被击中为止.
这是我到目前为止所得到的:
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String s = "";
do
{
ClassLoader clsldr = ClassLoader.getSystemClassLoader();
Package[] pkgs = Package.getPackages();
s = console.readLine();
if(s.equals(":exit"))
{
System.exit(0);
}
boolean classFound = false;
Object loadedClass = null;
String classname = "";
for (int i = 0; i < pkgs.length; i++) {
Package package1 = pkgs[i];
try
{
classname = package1.getName().replace('/', '.') + "." + s;
clsldr.loadClass(classname);
loadedClass = Class.forName(classname);
classFound = true;
}
catch(Exception e)
{
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个界面,例如,为此看起来像这样:
interface IFoo<TEnum> where TEnum : struct, IConvertible, IComparable, IFormattable
{
TEnum MyEnum { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个抽象的基类,如下所示:
abstract class FooBase<TEnum> : IFoo<TEnum> where TEnum : struct, IConvertible, IFormattable, IComparable
{
public TEnum MyEnum { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我继承基类,如下所示:
class MyFoo : FooBase<MyFoo.MyFooEnum>
{
public enum MyFooEnum
{
Foo1,
Foo2,
}
}
Run Code Online (Sandbox Code Playgroud)
如何MyFoo使用类型参数从泛型方法实例化FooBase?
我几乎都在寻找这样的东西:
static class FooMethods
{
public static TFooClass GetFoo<TFooClass>() where TFooClass : FooBase, new()
{
TFooClass fooclass = new TFooClass();
return …Run Code Online (Sandbox Code Playgroud)