我的GUI出错了.尝试设置标题栏图标,然后将其包含在Runnable JAR中.
BufferedImage image = null;
try {
image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));
}
catch (IOException e) {
e.printStackTrace();
}
frame.setIconImage(image);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at GUI.<init>(GUI.java:39)
at GUI.main(GUI.java:351)
Run Code Online (Sandbox Code Playgroud)
图像位于正确的目录中,"resources"文件夹是项目文件的根目录
我正在寻找一种方法来轻松地将任何外部二进制数据嵌入到由GCC编译的C/C++应用程序中.
我想做的一个很好的例子就是处理着色器代码 - 我可以把它保存在源文件中,const char* shader = "source here";但这是非常不切实际的.
我希望编译器为我做:在编译(链接阶段)时,读取文件"foo.bar"并将其内容链接到我的程序,以便我能够从内容中访问内容作为二进制数据码.
对于我想作为单个.exe文件分发的小型应用程序可能很有用.
GCC是否支持这样的事情?
我正在尝试使用CSharpCodeProvider编译下面的代码.该文件已成功编译,但是当我单击生成的EXE文件时,我收到错误(Windows正在搜索此问题的解决方案)并且没有任何反应.
当我使用CSharpCodeProvider编译下面的代码时,我MySql.Data.dll使用以下代码行添加了作为嵌入式资源文件:
if (provider.Supports(GeneratorSupport.Resources))
cp.EmbeddedResources.Add("MySql.Data.dll");
Run Code Online (Sandbox Code Playgroud)
该文件已成功嵌入(因为我注意到文件大小增加).
在下面的代码中,我尝试提取嵌入的DLL文件并将其保存到System32,但下面的代码由于某种原因不起作用.
namespace ConsoleApplication1
{
class Program
{
public static void ExtractSaveResource(String filename, String location)
{
//Assembly assembly = Assembly.GetExecutingAssembly();
Assembly a = .Assembly.GetExecutingAssembly();
//Stream stream = assembly.GetManifestResourceStream("Installer.Properties.mydll.dll"); // or whatever
//string my_namespace = a.GetName().Name.ToString();
Stream resFilestream = a.GetManifestResourceStream(filename);
if (resFilestream != null)
{
BinaryReader br = new BinaryReader(resFilestream);
FileStream fs = new FileStream(location, FileMode.Create); // Say
BinaryWriter bw = new BinaryWriter(fs);
byte[] ba = new byte[resFilestream.Length];
resFilestream.Read(ba, 0, ba.Length);
bw.Write(ba);
br.Close();
bw.Close(); …Run Code Online (Sandbox Code Playgroud) 一些框架(Qt,Windows,Gtk ...)提供了向二进制文件添加资源的功能.我想知道是否有可能在没有框架的情况下实现这一点,因为所有真正需要的是
如何使用gcc工具链实现这一目标?
我正在尝试将图像添加到JButton,我不确定我缺少什么.当我运行以下代码时,该按钮看起来与我创建它时没有任何图像属性完全相同.Water.bmp位于我的项目文件夹的根目录中.
ImageIcon water = new ImageIcon("water.bmp");
JButton button = new JButton(water);
frame.add(button);
Run Code Online (Sandbox Code Playgroud) 从eclipse运行Java应用程序时,我的ImageIcon显示得很好.
但是在创建了一个jar之后,图像的路径显然被搞砸了.
有没有办法在运行时从jar中提取图像,以便我可以打开它?或者,有更好的方法吗?
如果可能的话,我想分发一个jar文件.
我已经按照加载资源文件的方式使用了getClass.getResource(path).代码片段在这里:
String url = "Test.properties";
System.out.println("Before printing paths..");
System.out.println("Path2: "+ getClass().getResource(url).getPath());
FileInputStream inputStream = new FileInputStream(new File(getClass().getResource(url).toURI()));
i_propConfig.load(inputStream);
inputStream.close();
Run Code Online (Sandbox Code Playgroud)
我已经在eclipse中使用层次结构配置它(在源代码下有一个名为SwingDemo的文件夹.在SwingDemo中有我的java文件以及资源文件)...
当我在日食上运行时,一切运行正常.但是一旦我尝试从cmd行运行应用程序,就会出现空指针异常.
命令行部署层次结构如下:
文件夹: D:\Work\Java Progrms\SwingDemo
层次:
首先,我SwingDemo从命令行(javac CustomDialog.java)在文件夹中编译了这个文件.然后我将一步回到Java Programs文件夹(正如我在.java类中提到的那样)并使用着名的程序运行应用程序
java SwingDemo.CustomDialog
Run Code Online (Sandbox Code Playgroud)
我之前使用新的FileInputStream("path")时,我曾经遵循类似的步骤.做这种方式后我得到空指针异常..
我认为getClass().getResource(url)无法从特定目录加载文件.这就是我将资源放在与我的java文件相同的目录中的原因.它在Eclipse中运行良好.但是当我从命令行运行时,为什么这会出错.
我有一个由Windows服务和表单应用程序使用的报告.所以,我想把报告嵌入一个可供两者使用的DLL文件中.
问题是,如果我尝试在我的Windows窗体应用程序中设置ReportViewer控件的ReportEmbeddedResource属性,它将在Windows窗体应用程序中搜索资源,而不是dll文件.
例如:来自Windows窗体应用程序的代码:
rv.LocalReport.ReportEmbeddedResource = "MyReportInMyDLLFile.rdlc"
Run Code Online (Sandbox Code Playgroud)
如何让上面的命令查找我的DLL文件中的嵌入式资源?
我编写了自定义VirtualFile和VirtualPathProvider实现,这些实现成功获取了部分视图的嵌入式资源.
但是,当我尝试渲染它们时会产生此错误:
The view at '~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.
渲染局部视图时,在常规视图内部,它看起来如下所示:
Html.RenderPartial("~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml");
Run Code Online (Sandbox Code Playgroud)
是什么让它相信这不是局部观点?
编辑:我为虚拟文件和虚拟文件提供程序实现发布了我的代码,任何人偶然发现这个寻找解决方案来获得该组件的工作.这个问题也适用于基于问题标题的人.
ere是VirtualFile实现以供参考:
public class SVirtualFile : VirtualFile
{
private string m_path;
public SVirtualFile(string virtualPath)
: base(virtualPath)
{
m_path = VirtualPathUtility.ToAppRelative(virtualPath);
}
public override System.IO.Stream Open()
{
var parts = m_path.Split('/');
var assemblyName = parts[1];
var resourceName = parts[2];
assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
var assembly = System.Reflection.Assembly.LoadFile(assemblyName + ".dll");
if (assembly != null)
{
return assembly.GetManifestResourceStream(resourceName);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
的VirtualPathProvider:
public class SVirtualPathProvider : …Run Code Online (Sandbox Code Playgroud) virtualpathprovider partial-views embedded-resource asp.net-mvc-3
我理解Class.getResource()和ClassLoader.getResource()之间有什么区别? 从自己的代码,那
getClass().getResource("/path/image.png")
Run Code Online (Sandbox Code Playgroud)
是完全相同的
getClass().getClassLoader().getResource("path/image.png")
Run Code Online (Sandbox Code Playgroud)
getClass().getClassLoader().getResource("path/image.png")
Run Code Online (Sandbox Code Playgroud)
在可执行jar文件中返回null,而
getClass().getResource("/path/image.png")
Run Code Online (Sandbox Code Playgroud)
返回正确的URL.
Since Class.getResource()代表ClassLoader.getResource()在删除前导斜杠后,我希望这些调用是相同的,但显然它们不是这种情况.即使特殊类加载器附加到特定类,每次调用它仍然应该是相同的,再次导致相同的行为.
所以,问题是:是否存在以下代码在第一次调用时返回null但第二次调用的正确URL的任何明显情况?
package com.example;
import java.net.URL;
public class ResourceTest {
public void run() {
URL iconUrl1 = getClass().getClassLoader().getResource("path/image.png");
System.out.println("ClassLoader.getResource(\"path/image.png\"): " + iconUrl1);
URL iconUrl2 = getClass().getResource("/path/image.png");
System.out.println("Class.getResource(\"/path/image.png\"): " + iconUrl2);
}
public static void main(String[] args) {
ResourceTest app = new ResourceTest();
app.run();
}
}
Run Code Online (Sandbox Code Playgroud)